import store from '@/store'

function checkPermission(el, binding) {
    // 获取绑定的值，此处为权限
    const { value } = binding
    // 获取所有的功能指令
    const points = store.getters.userInfo.permission.points
    // 当传入的指令集为数组时
    if (value && value instanceof Array) {
        // 匹配对应的指令
        const hasPermission = points.some(point => {
            return value.includes(point)
        })
        // 如果无法匹配，则表示当前用户无该指令，那么删除对应的功能按钮
        if (!hasPermission) {
            el.parentNode && el.parentNode.removeChild(el)
        }
    } else {
        // eslint-disabled-next-line
        throw new Error('v-permission value is ["admin","editor"]')
    }
}

export default {
    // 在绑定元素的父组件被挂载后调用
    mounted(el, binding) {
        checkPermission(el, binding)
    },
    // 在包含组件的 VNode 及其子组件的 VNode 更新后调用
    update(el, binding) {
        checkPermission(el, binding)
    }
}